<?
require 'ParserAbstract.php';
class KotomatrixParse extends ParserAbstract{
	
	public function __construct($url = 'http://kotomatrix.ru/top'){	
		parent::__construct($url);
		$this->_page = mb_convert_encoding( $this->_page, 'HTML-ENTITIES', 'utf-8' );
		$this->parseTablePost();
	}
    
    /**
	 * Извлекаем таблицу с постами
	 */
	public function parseTablePost(){
	
		$start = strpos($this->_page, '<div class="matrix_title">');
        
		$this->_page = substr($this->_page, $start);

		$end = strripos($this->_page, '</textarea>');
        
		$this->_page = substr($this->_page, 0, $end);
		
	}
    
    public function parsePosts($tag){
    	
        $dom = new Zend_Dom_Query($this->_page);
        
        $titles = $dom->query('.matrix_title');
		
		$postImages = $dom->query('img[src*="http"]');
		
		$postInfo = $dom->query('table[style*="margin"]');
		
		$position = 0;
		
		$posts = array();
		
		// всего записей
		$_all = 0;
		
		// новых записей
		$_new = 0;
		
		// обновленных записей
		$_update = 0;
		
        foreach($titles as $title){
        
            $html = $this->getInnerHtml( $title );
            
            preg_match('/\<a\shref\=\"(.*)\"/isU', $html, $m);
			++$_all;
            
			// ссылка на пост
            $link = 'http://kotomatrix.ru' . $m[1];
            
            $_id = trim($m[1], '/');
            $_id = explode('/', $_id);
			// ID поста
            $id = $_id[1];
            
            //$r = $dom->query("#r$id")->current();
            $r = file_get_contents('http://kotomatrix.ru/js/ajax/vote/?val=10&id=' . $id);
            preg_match('/Рейтинг\:\s(.*)\s\(голосов\:\s(.*)\)/isU', $r, $m);
            // рейтинг
            $rating = floatval($m[1]);
            // количество голосов
            $votes = intval($m[2]);
            
            $bodyInfo = (0 === $position) ? $postInfo->current()->nodeValue : $postInfo->next()->nodeValue;

            // Извлекаем дату и время
            $dateTime = strripos(trim($bodyInfo), 'автор');
            $dateTime = substr(trim($bodyInfo), 0, $dateTime);
            $date = trim(str_replace('Добавлено: ','',$dateTime));
			
            preg_match('/([0-9]{2}\.[0-9]{2}\.[0-9]{4})\s([0-9]{2}\:[0-9]{2}\:[0-9]{2})/i', $date, $r);

            $_date = explode('.', $r[1]);
            $date = $_date[2] . '-' . $_date[1] . '-' . $_date[0] . ' ' . $r[2];
            
            // ищем в базе пост по ID
            $srow = $this->_model->select();
            $srow->where('external_id = ?', $id)
                    ->where('source_id', 2);
            $row = $this->_model->fetchRow($srow);
            if ($row) {
                // если находим то обновляем рейтинг и пропускаем
                $this->_model->update(
                    array('external_rating' => $rating, 'external_votes' => $votes, 'external_created_at' => date('Y-m-d H:i:s',strtotime($date))),
                    array($this->_model->getAdapter()->quoteInto('source_id = ?', 2), $this->_model->getAdapter()->quoteInto('external_id = ?', $id))
                );
                ++$_update;
                ++$position;
                continue;
            
            }
			
			// Получаем картинку
			$bodyPost = (0 === $position) ? $postImages->current() : $postImages->next();

			/*$bodyImg = $bodyPost->childNodes->item(2);
			if(!$bodyImg->hasAttribute('alt')){
				$bodyImg = $bodyPost->childNodes->item(3);
			}*/
			//$description = $bodyImg->getAttribute('alt');
			$img = $bodyPost->getAttribute('src');
            
            $post = array(
                'external_id' => $id,
                'type' => 'image',
                'source_id' => 2,
				'external_rating' => $rating,
				'external_votes' => $votes,
				'title' => $title->nodeValue,
				'external_url' => $link,
				'image_url' => $img,
				'external_created_at' => date('Y-m-d H:i:s',strtotime($date)),
                                'created_at' => date('Y-m-d H:i:s', time()),
				'tag' => $tag
				
			);
            $this->_model->AddPost($post);
            	
            ++$position;
			++$_new;
        }
        
        $a = ActivityPeer::getInstance()->crone_work('Kotomatrix', $this->_url, $_all, $_new, $_update);
    
    }
}